perm filename SAIOUT.FAI[S,AIL]1 blob
sn#102574 filedate 1974-05-22 generic text, type T, neo UTF8
COMPIL(OUT,<OUT>,<SAVE,RESTR,GETCHN,SIMIO,NOTOPN,X11,X22>
,<STRING OUTPUT ROUTINE>)
.OUT.:
HERE (OUT) PUSHJ P,SAVE ;ACS, GET USER, SAVE RETURN FOR ERROR
MOVE LPSA,X22
MOVE CHNL,-1(P) ;CHANNEL NUMBER
LOADI7 A,<OUT>
PUSHJ P,GETCHN ;VALIDATE AND GET CDB, ETC.
HRRE Z,-1(SP) ;#CHARS
POP SP,D
SUB SP,X11
MOVE B,OBP(CDB)
MOVE A,OCOWNT(CDB)
JRST .OUT1
.OUT: SOJLE A,OUT1 ;NEED OUTPUT??
.OUT2: ILDB X,D ;GET A CHAR
IDPB X,B ;PUT IT AWAY
.OUT1: SOJGE Z,.OUT ;LOOP
OUTDUN: MOVEM B,OBP(CDB) ;PUT BP AWAY
MOVEM A,OCOWNT(CDB) ;COUNT AWAY
SKIPGE TTYDEV(CDB) ;TTY?
XCT IOOUT,SIMIO ; YES, FORCE OUTPUT
JRST RESTR
JRST RESTR
OUT1: LDB TEMP,[POINT 4,DMODE(CDB),35] ;MODE
CAIL TEMP,15 ;DUMP?
JRST DMPO ;YES
MOVEM B,OBP(CDB) ;PUT REAL BP AWAY
XCT IOOUT,SIMIO ;DO THE OUTPUT
JFCL ;ERRORS HANDLED IN SIMIO
MOVE B,OBP(CDB) ;NEW BP
MOVE A,OCOWNT(CDB) ;NEW COUNT
JRST .OUT2 ;CONTINUE
DMPO: PUSH P,D
HRRZ D,OBUF(CDB) ;PTR TO BUFFER AREA
SUBI D,1 ;ADDR-1 FOR IOWD
HRLI D,-=128 ;-WORD COUNT
MOVEI D+1,0
XCT IODOUT,SIMIO ;OUT D,
JFCL ;ERRORS HANDLED IN SIMIO
OKO: HRRZ B,D ;SAVE ADDR
HRLI D,1(D) ;BLT WORD
HRRI D,2(D)
SETZM -1(D)
BLT D,=128(B) ;CLEAR BUFFER
POP P,D ;RESTORE INPUT BYTE POINTER
AOS @ENDFL(CDB) ;SPECIAL TREATMENT
HRLI B,700 ;POINT 7,-1(1ST WORD),35
MOVEM B,OBP(CDB)
MOVEI A,5*=128 ;CHAR COUNT
MOVEM A,OCOWNT(CDB)
JRST .OUT2 ;AFTER OUTPUT SIMULATION, GO ON
ENDCOM(OUT)